package com.janwen.interview.j2se;

/**
 * 静态变量初始化顺序
 * 
 * 
 * 结果： first = 0
 * 
 * 分析： 由于在初始化second之前test方法就访问了它，那么方法得到的是second的默认值，即 0。 因此输出结果first=
 * 0，而不是2。假如你使用方法调用来初始化静态变量， 那么你必须保证 这些方法并不依赖于在它们之后声明的其它静态变量。
 * 静态变量以及静态初始化块是在类被加载进 JVM 时执行初始化操作的。 Java
 * 语言规范8.5节指出“静态初始化块和静态变量是按照其在代码中出现的顺序依次执行初始化操作的， 而不能在类变量声明出现之前就引用它”。
 * 
 * @author janwen Oct 30, 2012
 */
public class StaticVarInit {
    
	//①顺序1
	static int first = test();
	//②顺序2
	static int second = 2;

	static int test() {
		return second;
	}

	// static int first = test();
	public static void main(String[] args) {
		System.out.println("first = " + first);
	}

}
